package com.ryder.petmatediarybackend.module.auth.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.ryder.petmatediarybackend.module.auth.entity.SysRolePermission;
import com.ryder.petmatediarybackend.module.auth.vo.PermissionVO;

import java.util.List;

/**
 * 描述：角色-权限关联表(SysRolePermission)表服务接口
 *
 * @author Ryder
 * @version 1.0
 * @since 1.0
 * 更新日期: 2025/10/26
 */
public interface SysRolePermissionService extends IService<SysRolePermission> {

    /**
     * 给角色分配权限（先删除旧的，再批量插入新的）
     */
    void assignPermissions(Long roleId, List<Long> permissionIds);

    /**
     * 移除角色权限
     */
    void removePermissions(Long roleId, List<Long> permissionIds);

    /**
     * 查询角色的权限列表（根据角色查询）
     */
    List<PermissionVO> getRolePermissions(Long roleId);

    /**
     * 查询所有可用权限（用于分配时选择）
     */
    List<PermissionVO> listAllPermissions();

    /**
     * 查询角色已绑定的权限ID列表（仅用于初始化检查）
     */
    List<Long> getPermissionIdsByRoleId(Long roleId);

    /**
     * 获取用户的所有权限编码（通过用户角色查询）
     * 用于 StpInterfaceImpl
     */
    List<String> getUserPermissions(Long userId);

    /**
     * 获取用户的所有角色编码
     * 用于 StpInterfaceImpl
     */
    List<String> getUserRoles(Long userId);

    /**
     * 刷新用户权限缓存
     */
    void refreshUserPermissionCache(Long userId);

    /**
     * 刷新角色下所有用户的权限缓存
     */
    void refreshRoleUsersPermissionCache(Long roleId);
}
